# coding: utf-8
'''
后宫选妃
'''
import random
import time


class beauty:
    def __init__(self, name):
        self.name = name

    def consume(self):
        '''
        美女消耗方法
        :return: 只要是美女,消耗10点精力
        '''
        return 10

# 身体棒棒的美女
class good_body_beauty(beauty):
    def __init__(self, name, body):
        # 继承父类的name,传值给父类初始化
        super().__init__(name)
        self.body = body

    # 子类的方法名和父类的方法名一致
    # 重写:对父类的方法进行'增强'
    def consume(self):
        return 30

# 声音好听的美女
class good_voice_beauty(beauty):
    def __init__(self, name, voice):
        # 继承父类的name,传值给父类初始化
        super().__init__(name)
        self.voice = voice

    # 如果直接想使用父类的方法,此处不需要单独在写
    def consume(self):
        return 20
# class  身材好,声音好(beauty):

class king:
    def __init__(self, name, blood):
        self.name = name
        self.blood = blood
    # 临幸妃子
    def deplete(self,beauty_obj):
        '''
        开闭原则,后期如果软件需要新增美女类型,只需要他满足继承美女即可
        子类如果重写父类的同名函数,这种语法叫方法的重写,调用的时候,会调用子类的
        :param beauty_obj:
        :return:
        '''
        a = beauty_obj.consume()
        # 如果伤害值已经超过血线,直接->0
        if self.blood < a:
            self.blood = 0
        else:
            self.blood -= a

    # 补充能量
    def supplement(self,power):
        self.blood += power
    # 充值VIP
    # ...


# 测试
# 构建美女1
b1 = good_body_beauty('池田依来沙', '魔鬼身材')
# 构建美女2
b2 = good_voice_beauty('高圆圆', '音清体柔易推倒')
# 构建后宫
beauty_list = [b1, b2]
# 你的信息
king_su = king('苏焱', 180)

while king_su.blood > 0:
    # 随机选
    b = random.choice(beauty_list)
    print(f'今晚您选择的是:{b.name},即将侍寝,预计耗损部分精力...')
    # 执行
    # time.sleep(3)
    king_su.deplete(b)
    print(f'侍寝结束,您剩余精力为:{king_su.blood}')
    # 判断是否结束
    if king_su.blood < 50:
        n = input('皇上,您的精力不足,请问是否服用大补丸? Y/N')
        king_su.supplement(100) if n == 'Y' else print('请注意节制身体')

print('精尽而亡!')